from threading import Thread, Lock
from multiprocessing import Process, Lock, Queue

def save_file(index, lock):
    with lock:
        with open("test.log", "a", encoding="utf-8") as f:
            f.write(str(index) + "\n")

def save_queue(index, my_queue):
    my_queue.put(index)

def foo():
    global zero
    for i in range(10**5):
        with lock:
            zero += 1
            zero -= 1


if __name__ == "__main__":

#多线程锁
    zero = 0
    thread_array = []
    lock = Lock()
    for i in range(2):
        t = Thread(target=foo)
        thread_array.append(t)
        t.start()
    for t in thread_array:
        t. join()
    print(zero)


#多进程锁
    process_array = []
    lock = Lock()
    for i in range(10):
        p = Process(target=save_file, args=(i, lock))
        process_array.append(p)
        p.start()
    for p in process_array:
        p.join()
    print("done")

#多进程通过Queue来实现进程通信
    process_array = []
    my_queue = Queue()
    for i in range(10):
        p = Process(target=save_queue, args=(i, my_queue))
        process_array.append(p)
        p.start()
    for p in process_array:
        p.join()

    for i in range(10):
        print(my_queue.get())








